﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

namespace ProjectA
{
    public static class Excel
    {
        private static bool bResultadoImportar;
        public static DataTable ImportarDesdeArchivo(string NombreArchivo, string NombreHoja)
        {
            try
            {
                OleDbConnection Conexion = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + NombreArchivo + ";Extended Properties=Excel 12.0;");
                OleDbCommand CmdOle = new OleDbCommand();

                CmdOle.Connection = Conexion;
                CmdOle.CommandType = CommandType.Text;
                CmdOle.CommandText = "SELECT * FROM [" + NombreHoja + "$A1:DF50]";

                OleDbDataAdapter AdaptadorOle = new OleDbDataAdapter(CmdOle.CommandText, Conexion);
                DataTable dtTabla = new DataTable();
                AdaptadorOle.Fill(dtTabla);
                return dtTabla;
            }
            catch (Exception e)
            {
                return null;
            }
        }

        public static DataTable ImportarDesdeArchivo()
        {
            try
            {
                OpenFileDialog VentanaEscogerArchivo = new OpenFileDialog();
                VentanaEscogerArchivo.Title = "Importar desde Excel";
                VentanaEscogerArchivo.DefaultExt = ".xlsx";
                VentanaEscogerArchivo.Filter = "Documentos Excel (*.xlsx,*.xls)|*.xlsx;*.xls";
                VentanaEscogerArchivo.Multiselect = false;
                DataTable dtTabla = new DataTable();
                bResultadoImportar = true;
                VentanaEscogerArchivo.FileOk += new System.ComponentModel.CancelEventHandler(VentanaEscogerArchivo_FileOk);
                VentanaEscogerArchivo.ShowDialog();
                if (!bResultadoImportar)
                {
                    string NombreArchivo = VentanaEscogerArchivo.FileName;                  
                    OleDbConnection Conexion = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + NombreArchivo + ";Extended Properties=Excel 12.0;");
                    OleDbCommand CmdOle = new OleDbCommand();

                    CmdOle.Connection = Conexion;
                    CmdOle.CommandType = CommandType.Text;

                    CmdOle.CommandText = "SELECT * FROM [Hoja1$A1:Z50]";

                    OleDbDataAdapter AdaptadorOle = new OleDbDataAdapter(CmdOle.CommandText, Conexion);
                    AdaptadorOle.Fill(dtTabla);
                    return dtTabla;
                }
                return null;
            }
            catch (Exception e)
            {
                return null;
            }
        }

        public static DataSet ImportarProveedoresDesdeArchivo()
        {
            try
            {
                OpenFileDialog VentanaEscogerArchivo = new OpenFileDialog();
                VentanaEscogerArchivo.Title = "Importar proveedores desde Excel";
                VentanaEscogerArchivo.DefaultExt = ".xlsx";
                VentanaEscogerArchivo.Filter = "Documentos Excel (*.xlsx,*.xls)|*.xlsx;*.xls";
                VentanaEscogerArchivo.Multiselect = false;
                DataSet dsArchivo = new DataSet();
                DataTable dtProveedores = new DataTable();
                dtProveedores.TableName = "Proveedores";
                bResultadoImportar = true;
                VentanaEscogerArchivo.FileOk += new System.ComponentModel.CancelEventHandler(VentanaEscogerArchivo_FileOk);
                VentanaEscogerArchivo.ShowDialog();
                if (!bResultadoImportar)
                {
                    string NombreArchivo = VentanaEscogerArchivo.FileName;
                    OleDbConnection Conexion = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + NombreArchivo + ";Extended Properties=Excel 12.0;");
                    OleDbCommand CmdOle = new OleDbCommand();

                    CmdOle.Connection = Conexion;
                    CmdOle.CommandType = CommandType.Text;
                    CmdOle.CommandText = "SELECT * FROM [Proveedores$A1:G601]";

                    OleDbDataAdapter AdaptadorOle = new OleDbDataAdapter(CmdOle.CommandText, Conexion);
                    AdaptadorOle.Fill(dtProveedores);

                    dsArchivo.Tables.Add(dtProveedores);
                    return dsArchivo;
                }
                return null;
            }
            catch (Exception e)
            {
                return null;
            }
        }

        public static DataSet ImportarOrdenesDesdeArchivo()
        {
            try
            {
                OpenFileDialog VentanaEscogerArchivo = new OpenFileDialog();
                VentanaEscogerArchivo.Title = "Importar ordenes desde Excel";
                VentanaEscogerArchivo.DefaultExt = ".xlsx";
                VentanaEscogerArchivo.Filter = "Documentos Excel (*.xlsx,*.xls)|*.xlsx;*.xls";
                VentanaEscogerArchivo.Multiselect = false;
                DataSet dsArchivo = new DataSet();
                DataTable dtOrdenes = new DataTable();
                dtOrdenes.TableName = "Ordenes";
                DataTable dtItems = new DataTable();
                dtItems.TableName = "Items";
                bResultadoImportar = true;
                VentanaEscogerArchivo.FileOk += new System.ComponentModel.CancelEventHandler(VentanaEscogerArchivo_FileOk);
                VentanaEscogerArchivo.ShowDialog();
                if (!bResultadoImportar)
                {
                    string NombreArchivo = VentanaEscogerArchivo.FileName;
                    OleDbConnection Conexion = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + NombreArchivo + ";Extended Properties=Excel 12.0;");
                    OleDbCommand CmdOle = new OleDbCommand();

                    CmdOle.Connection = Conexion;
                    CmdOle.CommandType = CommandType.Text;
                    CmdOle.CommandText = "SELECT * FROM [Ordenes$A1:G601]";

                    OleDbDataAdapter AdaptadorOle = new OleDbDataAdapter(CmdOle.CommandText, Conexion);
                    AdaptadorOle.Fill(dtOrdenes);

                    CmdOle.CommandText = "SELECT * FROM [Item$A1:E1801]";

                    AdaptadorOle = new OleDbDataAdapter(CmdOle.CommandText, Conexion);
                    AdaptadorOle.Fill(dtItems);
                    dsArchivo.Tables.Add(dtOrdenes);
                    dsArchivo.Tables.Add(dtItems);
                    return dsArchivo;
                }
                return null;
            }
            catch (Exception e)
            {
                return null;
            }
        }

        public static DataSet ImportarFacturasDesdeArchivo()
        {
            try
            {
                OpenFileDialog VentanaEscogerArchivo = new OpenFileDialog();
                VentanaEscogerArchivo.Title = "Importar facturas desde Excel";
                VentanaEscogerArchivo.DefaultExt = ".xlsx";
                VentanaEscogerArchivo.Filter = "Documentos Excel (*.xlsx,*.xls)|*.xlsx;*.xls";
                VentanaEscogerArchivo.Multiselect = false;
                DataSet dsArchivo = new DataSet();
                DataTable dtFacturas = new DataTable();
                dtFacturas.TableName = "Facturas";
                DataTable dtItems = new DataTable();
                dtItems.TableName = "Items";
                bResultadoImportar = true;
                VentanaEscogerArchivo.FileOk += new System.ComponentModel.CancelEventHandler(VentanaEscogerArchivo_FileOk);
                VentanaEscogerArchivo.ShowDialog();
                if (!bResultadoImportar)
                {
                    string NombreArchivo = VentanaEscogerArchivo.FileName;
                    OleDbConnection Conexion = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + NombreArchivo + ";Extended Properties=Excel 12.0;");
                    OleDbCommand CmdOle = new OleDbCommand();

                    CmdOle.Connection = Conexion;
                    CmdOle.CommandType = CommandType.Text;
                    CmdOle.CommandText = "SELECT * FROM [Facturas$A1:M601]";

                    OleDbDataAdapter AdaptadorOle = new OleDbDataAdapter(CmdOle.CommandText, Conexion);
                    AdaptadorOle.Fill(dtFacturas);

                    CmdOle.CommandText = "SELECT * FROM [Item$A1:F1801]";

                    AdaptadorOle = new OleDbDataAdapter(CmdOle.CommandText, Conexion);
                    AdaptadorOle.Fill(dtItems);
                    dsArchivo.Tables.Add(dtFacturas);
                    dsArchivo.Tables.Add(dtItems);
                    return dsArchivo;
                }
                return null;
            }
            catch (Exception e)
            {
                return null;
            }
        }

        static void VentanaEscogerArchivo_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
        {
            bResultadoImportar = e.Cancel;
        }

        public static void ExportarAArchivo(DataGridView TablaDeOrigen)
        {
            try
            {
                Microsoft.Office.Interop.Excel.Application Archivo = new Microsoft.Office.Interop.Excel.Application();
                Archivo.Application.Workbooks.Add(true);
                int IndexColumna = 0;
                foreach (DataGridViewColumn col in TablaDeOrigen.Columns)
                {
                    IndexColumna++;
                    Archivo.Cells[1, IndexColumna] = col.Name;
                }
                int IndexFila = 0;
                foreach (DataGridViewRow row in TablaDeOrigen.Rows)
                {
                    IndexFila++;
                    IndexColumna = 0;
                    foreach (DataGridViewColumn col in TablaDeOrigen.Columns)
                    {
                        IndexColumna++;
                        Archivo.Cells[IndexFila + 1, IndexColumna] = row.Cells[col.Name].Value;
                    }
                }
                Archivo.Visible = true;
                Microsoft.Office.Interop.Excel.Worksheet HojaDeExcel = Archivo.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
                HojaDeExcel.Activate();
            }
            catch (Exception e)
            {

            }
        }
        public static void ExportarAArchivo(DataTable TablaDeOrigen)
        {
            try
            {
                DataGridView Data = new DataGridView();
                Data.DataSource = TablaDeOrigen;
                Microsoft.Office.Interop.Excel.Application Archivo = new Microsoft.Office.Interop.Excel.Application();
                Archivo.Application.Workbooks.Add(true);
                int IndexColumna = 0;
                foreach (DataGridViewColumn col in Data.Columns)
                {
                    IndexColumna++;
                    Archivo.Cells[1, IndexColumna] = col.Name;

                }
                int IndexFila = 0;
                foreach (DataGridViewRow row in Data.Rows)
                {
                    IndexFila++;
                    IndexColumna = 0;
                    foreach (DataGridViewColumn col in Data.Columns)
                    {
                        IndexColumna++;
                        Archivo.Cells[IndexFila + 1, IndexColumna] = row.Cells[col.Name].Value;
                    }
                }
                Archivo.Visible = true;
                Microsoft.Office.Interop.Excel.Worksheet HojaDeExcel = Archivo.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
                HojaDeExcel.Activate();
            }
            catch (Exception e)
            {
            }
        }
    }
}
